home *** CD-ROM | disk | FTP | other *** search
/ LOGIC Apps / Logic-APPLE_II_APPS.iso / pc / LOGIC Apple II 5.25" Library - DOS Part 2 / DOS036.dsk / MASTERMIND.bas < prev    next >
BASIC Source File  |  2012-02-16  |  8KB  |  132 lines

  1. 0  LOMEM: 8192
  2. 1  DIM PT(12)
  3. 5  PRINT  CHR$(4);"BLOADMASTERMIND CORE(A$1C00/L$11C)"
  4. 8  TEXT : INVERSE 
  5. 10  HOME : PRINT : HTAB 9: PRINT "<CTRL-G>M <CTRL-G>A <CTRL-G>S <CTRL-G>T <CTRL-G>E <CTRL-G>R <CTRL-G>M <CTRL-G>I <CTRL-G>N <CTRL-G>D"
  6. 11  NORMAL : PRINT : PRINT : HTAB 12: PRINT "BY PAUL ZABRS"
  7. 20  GOSUB 900: GOTO 300
  8. 30  FOR I = 1 TO C:G(I) = I: NEXT : FOR I = 1 TO C:T = G(I):R =  RND(3) *C +1:G(I) = G(R):G(R) = T: NEXT : RETURN 
  9. 40  FOR I = 1 TO H:G(I) =  INT( RND(3) *C +1): NEXT : RETURN 
  10. 50  VTAB J +P: HTAB 29: CALL  -958: PRINT B: RETURN 
  11. 60  VTAB J +P: HTAB 35: CALL  -958: PRINT W: RETURN 
  12. 65  HTAB 29: VTAB J +P: CALL  -958: INVERSE : PRINT " ";: NORMAL : GOSUB 160:B = Z -176: HTAB 29: PRINT B: IF B <0  OR B >H  THEN 65
  13. 70  GOSUB 50: IF B = H  THEN  POP : GOTO 2000
  14. 80  VTAB J +P: HTAB 35: CALL  -958: INVERSE : PRINT " ";: NORMAL : GOSUB 160: HTAB 35::W = Z -176: PRINT W: IF W <0  OR W >H  THEN 80
  15. 85  GOSUB 60: POKE 3,B: POKE 4,W: CALL 7266
  16. 86 T = W +B: IF T <H -1  AND J = 1  THEN  RETURN 
  17. 88  VTAB 20: HTAB 15: INVERSE : PRINT "THINKING..": NORMAL 
  18. 90  CALL 7332: VTAB 20: CALL  -958: IF  PEEK(0) = 255  THEN  POP : GOTO 3000
  19. 100  RETURN 
  20. 110  PRINT "PRESS SPACE BAR TO CONTINUE";: IF Q < >1  THEN  PRINT ",            ESC TO TERMINATE";
  21. 115  GET A$: IF  ASC(A$) = 27  AND Q < >1  THEN  POP : GOTO 300
  22. 120  RETURN 
  23. 150  VTAB P -3: PRINT "MY SCORE";: HTAB ( LEN(N$) +10): PRINT A: PRINT N$;" SCORE";: HTAB ( LEN(N$) +10): PRINT S: VTAB J +P: RETURN 
  24. 160  POKE  -16368,0
  25. 161 Z =  RND(3):Z =  PEEK( -16384): IF Z <128  THEN 161
  26. 162  POKE  -16368,0: RETURN 
  27. 200  FOR I = H +1 -T TO 2 *H -T:S(I -H +T) = G(I): POKE 7936 +I +T,I:PT(I -H +T) = I
  28. 205  IF I >C  THEN TT = C +2 -I +H +T:TQ = TT *(TT >H) +C *(TT < = H):S(I -H +T) = G(TQ):PT(I -H +T) = TQ: POKE 7936 +I +T,TQ
  29. 210  NEXT :Z =  PEEK(1): POKE 1,Z +H:Z =  PEEK(2): POKE 2,Z +2:Z =  PEEK(6): POKE 6,Z +1
  30. 215 J = J +1:S = S +1: IF Q < >4  THEN  VTAB J +P
  31. 220  PRINT J;".";: HTAB 8: FOR I = 1 TO H: PRINT S(I);"  ";: NEXT : IF Q = 4  THEN  FOR I = 1 TO H: POKE 7160 +I,PT(I): POKE 7152 +I,C(I): NEXT : CALL 7168: CALL 7266: GOSUB 570: RETURN 
  32. 225  GOSUB 65
  33. 230  RETURN 
  34. 300  TEXT : CLEAR :P = 6: REM  MENU
  35. 310  HOME : VTAB 3: PRINT "YOU CAN:": PRINT : PRINT : PRINT "1. PLAY AGAINST THE MACHINE": PRINT : PRINT "2. BREAK CODES YOURSELF": PRINT 
  36. 315  PRINT "3. GIVE THE MACHINE CODES TO BREAK": PRINT : PRINT "4. WATCH THE MACHINE SET UP CODES AND      THEN BREAK THEM ON A CONTINUOUS BASIS": PRINT "5. END"
  37. 320  VTAB 19: PRINT "WHICH ... ";
  38. 321  GOSUB 160
  39. 322  POKE  -16368,0:Q = Z -176: IF Q <1  OR Q >5  THEN 321
  40. 323  INVERSE : PRINT  CHR$(Q +48): NORMAL 
  41. 325  IF Q = 5  THEN  END 
  42. 330  IF Q = 1  THEN 920
  43. 335  GOTO 1000
  44. 400  HOME : INVERSE : PRINT "TO STOP PRESS SPACE BAR": POKE 34,1
  45. 410  CALL 7232: GOSUB 30: FOR I = 1 TO H:C(I) =  INT( RND(3) *C +1): POKE 7936 +I,I: NEXT :J = 1
  46. 415  PRINT : PRINT : PRINT "CODE = ";: INVERSE : FOR I = 1 TO H -1: PRINT G(C(I));"  ";: NEXT : PRINT G(C(H)): NORMAL : PRINT : PRINT J;".";: HTAB 8: FOR I = 1 TO H: PRINT G(I);"  ";: NEXT 
  47. 420  FOR I = 1 TO H: POKE 7160 +I,I: POKE 7152 +I,C(I): NEXT : CALL 7168: GOSUB 570: CALL 7266: IF  PEEK(3) = H  THEN 450
  48. 425 T =  PEEK(3) + PEEK(4): IF T <H -1  THEN  GOSUB 200
  49. 430  GOTO 440
  50. 435  FOR I = 1 TO H: POKE 7160 +I, PEEK(7 +I): POKE 7152 +I,C(I): NEXT : CALL 7168: GOSUB 570
  51. 440  IF  PEEK(3) = H  THEN 450
  52. 445  CALL 7266: CALL 7332:J = J +1: PRINT J;".";: HTAB 8: FOR I = 1 TO H: PRINT G( PEEK(7 +I));"  ";: NEXT : GOTO 435
  53. 450  IF  PEEK( -16384) < >160  THEN 410
  54. 452  FOR I = 1 TO 30: NEXT :V =  PEEK(37)
  55. 455  POKE  -16368,0: INVERSE : VTAB 1: PRINT "SPACE BAR TO CONTINUE, 'ESC' TO EXIT": WAIT  -16384,128
  56. 460 PE =  PEEK( -16384): POKE  -16368,0: IF PE < >155  THEN  VTAB 1: CALL  -868: PRINT "TO STOP PRESS SPACE BAR": NORMAL : POKE 37,V: GOTO 410
  57. 465  NORMAL : GOTO 300
  58. 480  HOME : INVERSE : PRINT "     CODE BREAKING   ";H;" HOLES   ";C;" COLORS ": NORMAL :N$ = "YOUR"
  59. 490  GOTO 530
  60. 500  TEXT : HOME : INVERSE : PRINT "GAME ";1 + INT(N/2);" OF ";G;"   YOUR TURN  ";H;" HLS  ";C;" CLRS": NORMAL 
  61. 530  FOR I = 1 TO H:G(I) =  INT( RND(3) *C +1): NEXT :J = 1
  62. 535  IF Q = 1  THEN  GOSUB 150
  63. 540  VTAB P: HTAB 9: PRINT N$;" GUESS";: HTAB 27: PRINT "BLACK WHITE"
  64. 545  VTAB J +P: PRINT J;".";:I = 1
  65. 550  VTAB J +P: HTAB (9 -H +3 *I +1): INVERSE : PRINT " ";: GOSUB 160:C(I) = Z -176: NORMAL : IF C(I) <1  OR C(I) >C  THEN 550
  66. 552  VTAB J +P: HTAB (9 -H +3 *I): PRINT " ";C(I): CALL  -958
  67. 555 I = I +1: IF I < = H  THEN 550
  68. 560  FOR I = 1 TO H: POKE 7160 +I,G(I): POKE 7152 +I,C(I): NEXT : CALL 7168
  69. 565  IF Q < >4  THEN  VTAB J +P
  70. 570  HTAB 29: PRINT  PEEK(3);: HTAB 35: PRINT  PEEK(4): IF Q = 4  THEN  RETURN 
  71. 575 A = A +1: IF Q = 1  THEN  GOSUB 150
  72. 580  IF  PEEK(3) <H  THEN J = J +1: GOTO 545
  73. 590  IF Q = 1  THEN  PRINT : PRINT  LEFT$(N$, LEN(N$) -2);", ";
  74. 600  PRINT "YOU DID IT IN ";J;" MOVES<CTRL-G>."
  75. 610 N = N +1
  76. 649  GOSUB 110
  77. 650  IF N = 2 *G  THEN 4000
  78. 660  ON Q GOTO 1030,480,0
  79. 800  HOME : HTAB 17: PRINT "RULES       ": PRINT : PRINT "INTEGERS BETWEEN 1 AND THE NUMBER SPECI-FIED BY THE PLAYER (9 IS MAXIMUM) ARE   USED TO DENOTE 'COLORS', OTHERWISE STAN-DARD MASTERMIND RULES APPLY."
  80. 805  PRINT 
  81. 810  PRINT "IN SCORING A ROW 'BLACK' IS THE NUMBER  OF ENTRIES CORRECT IN VALUE AND POSI-   TION, 'WHITE' IS THE NUMBER OF ENTRIES  CORRECT IN VALUE ONLY. EACH ENTRY IS    SCORED ONLY ONCE."
  82. 815  PRINT 
  83. 820  PRINT "EITHER 4 OR 5 HOLES CAN BE CHOSEN. THE  APPLE FULLY DUPLICATES A HUMAN OPPONENT AS CODEMAKER OR CODEBREAKER."
  84. 825  PRINT 
  85. 830  PRINT "BE CAREFUL IN SCORING THE APPLE (REMEM- BER IT DOES NOT MAKE MISTAKES AND CAN   DETECT YOUR OWN EASILY) SO THAT YOU DO  NOT LOSE POINTS."
  86. 835  VTAB 23:Q = 1: HTAB 7: PRINT "PRESS SPACEBAR TO CONTINUE"
  87. 840  GOSUB 160: RETURN 
  88. 900  PRINT : PRINT : PRINT "DO YOU WANT THE RULES (Y/N)? ":
  89. 905  GOSUB 160
  90. 907  IF Z = 217  THEN  GOSUB 800
  91. 910  RETURN 
  92. 920  HOME : PRINT : PRINT "WHAT IS YOUR NAME ";: INPUT N$:N$ =  LEFT$(N$,8) +"'S": PRINT : IF  LEN(N$) <3  THEN N$ = N$ +"   "
  93. 925  PRINT "HOW MANY GAMES DO YOU WANT TO PLAY,": PRINT  LEFT$(N$, LEN(N$) -2);"?";: INPUT " ";G: IF G <3  OR G >99  THEN  PRINT "MINIMUM 3 GAMES, MAXIMUM 99 GAMES": GOTO 925
  94. 1000  PRINT : PRINT "HOW MANY HOLES (4 OR 5)? ": GOSUB 160:H = Z -176
  95. 1005  IF H >5  OR H <4  THEN 1000
  96. 1010  PRINT : PRINT "HOW MANY COLORS (";6 *(H = 4) +8 *(H = 5);" TO ";7 *(H = 4) +9 *(H = 5);")": GOSUB 160:C = Z -176
  97. 1015  IF (C >9  OR C <8)  AND H = 5  THEN 1010
  98. 1017  IF (C >7  OR C <6)  AND H = 4  THEN 1010
  99. 1020  POKE 5,H: POKE 7,C
  100. 1021  ON Q GOTO 1029,480,1022,400
  101. 1022  HOME : INVERSE : PRINT " MACHINE BREAKS CODE  ";H;" HOLES  ";C;" COLORS ": NORMAL : GOTO 1035
  102. 1029  PRINT "DO YOU WANT TO START (Y/N)? ": GOSUB 160: IF Z = 217  THEN 500
  103. 1030  HOME : INVERSE : PRINT "GAME "; INT(1 +N/2);" OF ";G;"    MY TURN  ";H;" HLS  ";C;" CLRS": NORMAL 
  104. 1035  CALL 7232: VTAB 10: PRINT "PREPARE A CODE FOR ME TO BREAK": PRINT : GOSUB 110: VTAB 9: CALL  -958
  105. 1040  VTAB P: HTAB 10: PRINT "MY GUESS";: HTAB 27: PRINT "BLACK WHITE"
  106. 1050  GOSUB 30: FOR I = 1 TO H: POKE 7936 +I,I: NEXT :J = 1
  107. 1055 S = S +1: IF Q = 1  THEN  GOSUB 150
  108. 1060  PRINT J;".";: HTAB 8: FOR I = 1 TO H: PRINT G(I);"  ";: NEXT 
  109. 1062  GOSUB 65
  110. 1065  IF T <H -1  THEN  GOSUB 200
  111. 1066  GOTO 1110
  112. 1070  GOSUB 65
  113. 1110 J = J +1: VTAB J +P: PRINT J;".";: HTAB 8: FOR I = 1 TO H: PRINT G( PEEK(7 +I));"  ";: NEXT 
  114. 1120 S = S +1: PRINT : IF Q = 1  THEN  GOSUB 150
  115. 1130  GOTO 1070
  116. 2000  PRINT : PRINT "I DID IT IN ";J;" MOVES<CTRL-G><CTRL-G><CTRL-G>"
  117. 2050  GOSUB 110
  118. 2058  IF Q = 3  THEN 1022
  119. 2060 N = N +1: IF N = 2 *G  THEN 4000
  120. 2070  GOTO 500
  121. 2999  END 
  122. 3000  VTAB 20: INVERSE : PRINT "YOU HAVE MADE A MISTAKE IN SCORING<CTRL-G><CTRL-G><CTRL-G>";: IF Q = 3  THEN  PRINT : PRINT : NORMAL : GOSUB 110: GOTO 1022
  123. 3005  PRINT ", AND": HTAB 7: PRINT "THUS WILL LOSE 3 POINTS!!!": NORMAL 
  124. 3010 A = A +3:S = S -J: PRINT "THIS GAME WILL NOW BE REPLAYED": GOSUB 110: GOTO 1030
  125. 4000  HOME : VTAB 5: PRINT  LEFT$(N$, LEN(N$) -2);", YOUR SCORE IS ";S: PRINT : PRINT "MY SCORE IS ";A: PRINT : IF A >S  THEN  PRINT "AS USUAL, I WIN<CTRL-G>!<CTRL-G>!<CTRL-G>!": GOTO 4050
  126. 4010  IF A = S  THEN  PRINT "IT IS A TIE": GOTO 4050
  127. 4030  PRINT "YOU WIN"
  128. 4050  PRINT : PRINT "ANOTHER GAME (Y/N)? ";: GET A$: IF A$ = "Y"  THEN A = 0:S = 0:G = 0:N = 0: PRINT : HOME : GOTO 925
  129. 4060  GOTO 300
  130. 5000 "      PAUL ZABRS     "
  131. 5010 "  SYDNEY, AUSTRALIA  "
  132. 5020 "    DECEMBER 1979    "